﻿#pragma once
#include<Windows.h>
#include<time.h>
#include<stdio.h>
#include<stdbool.h>
#include<locale.h>
#include<stdlib.h>//system()函数包含其中
#define WALL L'□'
#define BODY L'●' 
#define FOOD L'★'  
#define POS_X 12
#define POS_Y 5
//#define KEY_PRESS(VK) ((GetAsyncKeyState(VK)==1) ? 1 : 0)
#define KEY_PRESS(VK)  ((GetAsyncKeyState(VK)&0x1) ? 1 : 0)
enum DIRECTION {
	UP = 1,
	DOWN,
	LEFT,
	RIGHT
};
enum GAME_STATUS {
	OK,
	END_NORMAL,//按esc键退出
	KILL_BY_WALL,
	KILL_BY_SELF,
};
typedef struct SnakeNode {
	//坐标
	int x;
	int y;
	struct SnakeNode* next;
}SnakeNode, *pSnakeNode;
//贪吃蛇结构
typedef struct  Snake {
	pSnakeNode _psnake;//指向蛇头结点的指针
	pSnakeNode _pFood;//指向食物结点的指针
	int _Sore;//总得分
	int _FoodWeigh;//一个食物的分数
	int SleepTime;//每走一步休息的时间，休息时间越短，速度越快，时间越长，速度越慢
	enum  DIRECTION _Dir;//描述蛇的方向
	enum GAME_STATUS _status;//描述游戏的状态
}Snake, *pSnake;
//游戏开始前的初始化
void Game_Start(pSnake ps);

//游戏运行过程
void Game_Run(pSnake ps);

//游戏结束
void Game_Over(pSnake ps);
//光标定位函数
void Setpos(int x, int y);
//游戏欢迎界面
void WelcomeToGame();
//地图创建
void CreatMap();
//贪吃蛇初始化
void Init_Snake(pSnake ps);
//创建食物
void Creat_Food(pSnake ps);
//打印帮助信息
void PrintHelpInfo(pSnake ps);
//暂停函数
void pause();
//贪吃蛇移动
void SnakeMove(pSnake ps);
//判断下一个位置是否是食物
int NextIsFood(pSnakeNode NextNode, pSnake ps);
//吃食物
void EatFood(pSnakeNode  psn, pSnake ps);
//不吃食物
void NotFood(pSnakeNode  psn, pSnake ps);
//撞墙
void Kill_By_Wall(pSnake ps);
//撞到自己
void Kill_By_Self(pSnake ps);